package com.cssw.fyzb.busi.service.live;

import com.cssw.fyzb.core.model.vo.live.*;
import com.cssw.fyzb.core.model.dodb.*;
import com.cssw.fyzb.core.model.mos.UserLiveMo;
import com.ydn.dbframe.plugin.activerecord.Page;

import java.util.List;

/**
 * @author Feng Chen
 */
public interface LiveService {

    /**
     * 获取直播实例
     *
     * @param liveId
     * @return
     */
    CmfLive findByLiveId(Long liveId);

    /**
     * 获取直播实例
     *
     * @param userId
     * @return
     */
    CmfLive getLivingByUserId(Long userId);


    /**
     * 创建直播间
     *
     * @param userId
     * @param anchorId
     * @param title
     * @param thumb
     * @param lat
     * @param lng
     * @return
     */
    LiveRoomVo createRoom(Long userId, Long anchorId, String title, String thumb, String lat, String lng);

    /**
     * 退出直播间
     *
     * @param anchorId
     * @param liveId
     */
    void dropRoom(Long anchorId, Long liveId);

    /**
     * 进入直播间
     *
     * @param liveId
     * @param userId
     */
    EnterLiveRoomVo enterRoom(Long liveId, Long userId);

    /**
     * 退出直播间
     *
     * @param liveId
     * @param userId
     */
    void exitRoom(Long liveId, Long userId);

    /**
     * 查看观众信息
     *
     * @param liveId
     * @param userId
     * @param num
     * @return
     */
    List<AudienceVo> listAudience(Long liveId, Long userId, Integer num);

    /**
     * 主播查询观众信息
     * @param liveId
     * @return
     */
    List<AudienceVo> listAudienceByAnchor(Long liveId);

    /**
     * 查询被踢
     *
     * @param liveId
     * @param operUserId
     * @param userId
     * @return
     */
    public CmfLiveKickOut queryLiveKickOut(Long liveId, Long operUserId, Long userId);

    /**
     * 踢人
     *
     * @param liveId
     * @param operUserId
     * @param userId
     * @return
     */
    Long addLiveKickOut(Long liveId, Long operUserId, Long userId);

    /**
     * 取消踢人
     *
     * @param id
     * @return
     */
    void removeLiveKickOutById(Long id);

    /**
     * 获取踢出列表
     *
     * @return
     */
    Page<CmfLiveKickOut> listLiveKickOut(Long liveId, Integer pageNumber, Integer pageSize);

    /**
     * 查询禁言
     *
     * @param liveId
     * @param operUserId
     * @param userId
     * @return
     */
    public CmfLiveMute queryLiveMute(Long liveId, Long operUserId, Long userId);

    /**
     * 禁言
     *
     * @param liveId
     * @param operUserId
     * @param userId
     * @return
     */
    Long addLiveMute(Long liveId, Long operUserId, Long userId);

    /**
     * 取消禁言
     *
     * @param id
     * @return
     */
    void removeLiveMuteById(Long id);

    /**
     * 获取禁言列表
     *
     * @return
     */
    Page<CmfLiveMute> listLiveMute(Long liveId, Integer pageNumber, Integer pageSize);


    /**
     * 举报
     *
     * @param liveId
     * @param fromUserId
     * @param toUserId
     * @param content
     * @return
     */
    Long addLiveReport(Long liveId, Long fromUserId, Long toUserId, String content);

    /**
     * 取消举报
     *
     * @param id
     * @return
     */
    void removeLiveReportById(Long id);

    /**
     * 获取举报列表
     *
     * @return
     */
    Page<CmfLiveReport> listLiveReport(Long liveId, Integer pageNumber, Integer pageSize);

    /**
     * 申请PK
     *
     * @param userId
     * @param fromLiveId
     * @param toLiveId
     * @return
     */
    Long addLivePk(Long userId, Long fromLiveId, Long toLiveId);

    /**
     * 关闭直播PK
     *
     * @param pkId
     * @return
     */
    void closeLivePk(Long pkId, Long userId);

    /**
     * 查询直播好友列表
     * @param userId
     * @param pageNumber
     * @param pageSize
     * @return
     */
    Page<LiveFriendVo> listLiveFriend(Long userId, Integer pageNumber, Integer pageSize);

    /**
     * Pk匹配同城
     * @param userId
     * @return
     */
    LiveMatchPkVo sameCityMatchPk(Long userId);

    /**
     * Pk匹配全国
     * @param userId
     * @return
     */
    LiveMatchPkVo nationwideMatchPk(Long userId);

    /**
     * 查询直播列表
     * @param key
     * @param pageNumber
     * @param pageSize
     * @return
     */
    Page<LiveVo> searchLive(String key, Integer pageNumber, Integer pageSize);

    /**
     * 直播点赞
     * @param liveId
     * @param userId
     */
    void liveLike(String liveId, String userId);

    /**
     * 获取直播统计信息（直播结束查询）
     * @param liveId
    liveId* @param userId
     * @return
     */
    LiveStatVo getLiveStat(Long liveId, Long userId);

    /**
     * 获取用户直播相关信息（观众和礼物）
     * @param
     * @return
     */
    UserLiveMo getUserLive(Long liveId);
}
